library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
── Attaching packages ────────────────────────────────────────────────────── tidyverse 1.3.1 ──
✔ ggplot2 3.3.6 ✔ purrr 0.3.4
✔ tibble 3.1.6 ✔ dplyr 1.0.9
✔ tidyr 1.2.0 ✔ stringr 1.4.0
✔ readr 2.1.2 ✔ forcats 0.5.1
Warning: package ‘ggplot2’ was built under R version 4.2.1Warning: package ‘dplyr’ was built under R version 4.2.1── Conflicts ───────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
library(lubridate)
Attaching package: ‘lubridate’
The following objects are masked from ‘package:base’:
date, intersect, setdiff, union
unclass(date_time1)
[1] 1577836800
attr(,"tzone")
[1] ""
date_time2 <- as.POSIXlt("2020-01-01")
date_time2
[1] "2020-01-01 GMT"
unclass(date_time2)
$sec
[1] 0
$min
[1] 0
$hour
[1] 0
$mday
[1] 1
$mon
[1] 0
$year
[1] 120
$wday
[1] 3
$yday
[1] 0
$isdst
[1] 0
$zone
[1] "GMT"
$gmtoff
[1] NA
Column data types: Date: “” Time: “” Date-time:
“”
ymd_h("2019-01-19 10")
[1] "2019-01-19 10:00:00 UTC"
netflix %>%
mutate(date_added = mdy(date_added))
NA
Calculating time spans
Three types of time span
‘Difftime’: a datetime object that represents days ‘Period’:
represents a timespan like week, month, day ‘Duration’: represents an
exact number of seconds
netflix <- netflix %>%
mutate(time_period = as.period(today() - date_added),
time_years = as.numeric(time_period, "years"),
time_hours = as.numeric(time_period, "hours"),
time_minutes = as.numeric(time_period, "minutes"),
time_seconds = as.numeric(time_period, "seconds"),
time_weeks = as.numeric(time_period, "weeks"),
time_months = as.numeric(time_period, "months"))
netflix
NA
Subtracting periods from dates
netflix <- netflix %>%
mutate(promo_date = date_added - weeks(2),
removal_date = date_added + month(4))
netflix
Durations
can also play around with dseconds(), dminutes(), dhours(), ddays(),
dmonths(), and dyears()
What date is a year after the 10th January 2020
ymd(20200110) + dyears(1)
[1] "2021-01-09 06:00:00 UTC"
Lab
Question 3
July is the most popular month to start the TdF.
Question 4
Saturday is the most common week day to start the TdF.
Question 7
arrive_time
[1] "2018-08-08 05:40:00 BST"
Question 8
diff_time
[1] 24.41667
Question 9
departure_time <- ymd_hm("2018-08-10 06:20", tz = "Europe/London")
flight_time <- hm("28:46")
departure_time
[1] "2018-08-10 06:20:00 BST"
flight_time
[1] "28H 46M 0S"
arrival_time <- with_tz(departure_time + flight_time, tzone = "Australia/Sydney")
arrival_time
[1] "2018-08-11 20:06:00 AEST"
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCmBgYA0KDQoNCg0KDQoNCmBgYHtyfQ0KDQpkYXRlX3RpbWUxIDwtIGFzLlBPU0lYY3QoIjIwMjAtMDEtMDEiKQ0KZGF0ZV90aW1lMQ0KDQojIHJldHVybiBzZWNvbmRzIG9mIGRhdGUNCnVuY2xhc3MoZGF0ZV90aW1lMSkNCg0KYGBgDQoNCmBgYHtyfQ0KIyBsaXN0IG9mIGVhY2ggdGltZS9kYXRlIGNvbXBvbmVudCAtIGdyZWF0IGZvciBleHRyYWN0aW5nIGNlcnRhaW4gdmFsdWVzDQpkYXRlX3RpbWUyIDwtIGFzLlBPU0lYbHQoIjIwMjAtMDEtMDEiKQ0KZGF0ZV90aW1lMg0KdW5jbGFzcyhkYXRlX3RpbWUyKQ0KDQpgYGANCg0KYGBge3J9DQoNCm5ldGZsaXggPC0gcmVhZF9jc3YoImRhdGEvbmV0ZmxpeC5jc3YiKQ0KDQpuZXRmbGl4DQoNCmBgYA0KDQpDb2x1bW4gZGF0YSB0eXBlczoNCkRhdGU6ICI8ZGF0ZT4iDQpUaW1lOiAiPHRpbWU+Ig0KRGF0ZS10aW1lOiAiPGR0dG0+Ig0KDQpgYGB7cn0NCg0KeW1kKCIyMDE5LTAxLTE5IikNCmNsYXNzKHltZCgiMjAxOS0wMS0xOSIpKQ0KDQptZHkoIkphbnVhcnkgOXRoLCAyMDE5IikNCmRteSgiOS1KYW4tMjAxOSIpDQoNCnltZF9obXMoIjIwMTktMDEtMTkgMTA6MDg6MjYiKQ0KeW1kX2htKCIyMDE5LTAxLTE5IDEwOjA4IikNCnltZF9oKCIyMDE5LTAxLTE5IDEwIikNCg0KYGBgDQoNCmBgYHtyfQ0KDQpuZXRmbGl4IDwtIG5ldGZsaXggJT4lIA0KICBtdXRhdGUoZGF0ZV9hZGRlZCA9IG1keShkYXRlX2FkZGVkKSkNCg0KYGBgDQoNCiMjIEV4dHJhY3RpbmcgaW5kaXZpZHVhbCBjb21wb25lbnRzDQoNCmBgYHtyfQ0KDQpuZXRmbGl4IDwtIG5ldGZsaXggJT4lIA0KICBtdXRhdGUoZGF5ID0gZGF5KGRhdGVfYWRkZWQpLA0KICAgICAgICAgbW9udGggPSBtb250aChkYXRlX2FkZGVkLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSksDQogICAgICAgICB5ZWFyID0geWVhcihkYXRlX2FkZGVkKSwNCiAgICAgICAgIHdlZWtkYXkgPSB3ZGF5KGRhdGVfYWRkZWQsIGxhYmVsID0gVFJVRSkpDQoNCm5ldGZsaXgNCg0KYGBgDQoNCiMjIENhbGN1bGF0aW5nIHRpbWUgc3BhbnMNCg0KVGhyZWUgdHlwZXMgb2YgdGltZSBzcGFuDQoNCidEaWZmdGltZSc6IGEgZGF0ZXRpbWUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBkYXlzDQonUGVyaW9kJzogcmVwcmVzZW50cyBhIHRpbWVzcGFuIGxpa2Ugd2VlaywgbW9udGgsIGRheQ0KJ0R1cmF0aW9uJzogcmVwcmVzZW50cyBhbiBleGFjdCBudW1iZXIgb2Ygc2Vjb25kcw0KDQpgYGB7cn0NCg0KbmV0ZmxpeCA8LSBuZXRmbGl4ICU+JSANCiAgbXV0YXRlKHRpbWVfZGlmZnRpbWUgPSB0b2RheSgpIC0gZGF0ZV9hZGRlZCkNCg0KbmV0ZmxpeA0KYGBgDQoNCmBgYHtyfQ0KDQpuZXRmbGl4IDwtIG5ldGZsaXggJT4lIA0KICBtdXRhdGUodGltZV9wZXJpb2QgPSBhcy5wZXJpb2QodG9kYXkoKSAtIGRhdGVfYWRkZWQpLA0KICAgICAgICAgdGltZV95ZWFycyA9IGFzLm51bWVyaWModGltZV9wZXJpb2QsICJ5ZWFycyIpLA0KICAgICAgICAgdGltZV9ob3VycyA9IGFzLm51bWVyaWModGltZV9wZXJpb2QsICJob3VycyIpLA0KICAgICAgICAgdGltZV9taW51dGVzID0gYXMubnVtZXJpYyh0aW1lX3BlcmlvZCwgIm1pbnV0ZXMiKSwNCiAgICAgICAgIHRpbWVfc2Vjb25kcyA9IGFzLm51bWVyaWModGltZV9wZXJpb2QsICJzZWNvbmRzIiksDQogICAgICAgICB0aW1lX3dlZWtzID0gYXMubnVtZXJpYyh0aW1lX3BlcmlvZCwgIndlZWtzIiksDQogICAgICAgICB0aW1lX21vbnRocyA9IGFzLm51bWVyaWModGltZV9wZXJpb2QsICJtb250aHMiKSkNCg0KbmV0ZmxpeA0KDQpgYGANCg0KIyMjIFN1YnRyYWN0aW5nIHBlcmlvZHMgZnJvbSBkYXRlcyANCg0KYGBge3J9DQoNCm5ldGZsaXggPC0gbmV0ZmxpeCAlPiUgDQogIG11dGF0ZShwcm9tb19kYXRlID0gZGF0ZV9hZGRlZCAtIHdlZWtzKDIpLA0KICAgICAgICAgcmVtb3ZhbF9kYXRlID0gZGF0ZV9hZGRlZCArIG1vbnRoKDQpKQ0KDQpuZXRmbGl4DQpgYGANCiMjIyBEdXJhdGlvbnMNCg0KYGBge3J9DQoNCm5ldGZsaXggPC0gbmV0ZmxpeCAlPiUgDQogIG11dGF0ZSh0aW1lX2R1cmF0aW9uID0gYXMuZHVyYXRpb24odG9kYXkoKSAtIGRhdGVfYWRkZWQpKQ0KDQpuZXRmbGl4ICU+JSANCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJ0aW1lIikpDQoNCmBgYA0KDQpjYW4gYWxzbyBwbGF5IGFyb3VuZCB3aXRoIGRzZWNvbmRzKCksIGRtaW51dGVzKCksIGRob3VycygpLCBkZGF5cygpLCBkbW9udGhzKCksDQphbmQgZHllYXJzKCkNCg0KV2hhdCBkYXRlIGlzIGEgeWVhciBhZnRlciB0aGUgMTB0aCBKYW51YXJ5IDIwMjANCg0KYGBge3J9DQoNCnltZCgyMDIwMDExMCkgKyB5ZWFycygxKQ0KeW1kKDIwMjAwMTEwKSArIGR5ZWFycygxKQ0KDQpgYGANCg0KIyMgVW5kZXJzdGFuZGluZyB0aW1lem9uZXMNCg0KYGBge3J9DQojIHNob3cgYWxsIHRpbWV6b25lcw0KT2xzb25OYW1lcygpDQoNCnltZF9obXMoIjIwMjMtMDktMTMgMTA6MjI6MDEiLCB0eiA9ICJBdGxhbnRpYy9GYWVyb2UiKQ0KDQpuZXRmbGl4ICU+JSANCiAgbXV0YXRlKGRhdGVfdHpfMSA9IGZvcmNlX3R6KGRhdGVfYWRkZWQsIHR6b25lID0gIkFzaWEvU2luZ2Fwb3JlIiksDQogICAgICAgICBkYXRlX3R6XzIgPSB3aXRoX3R6KGRhdGVfYWRkZWQsIHR6b25lID0gIkFzaWEvU2luZ2Fwb3JlIikpDQoNCmBgYA0KDQojIExhYg0KDQojIyBRdWVzdGlvbiAxDQoNCmBgYHtyfQ0KDQp0ZGYgPC0gcmVhZF9jc3YoImRhdGEvdG91cl9kZV9mcmFuY2UuY3N2IikNCg0KdGRmDQpgYGANCg0KIyMgUXVlc3Rpb24gMg0KDQpgYGB7cn0NCg0KdGRmIDwtIHRkZiAlPiUgDQogIG11dGF0ZShzdGFydF9kYXRlID0gbWR5KHN0YXJ0X2RhdGUpLA0KICAgICAgICAgYm9ybiA9IGRteShib3JuKSwNCiAgICAgICAgIGRpZWQgPSBtZHkoZGllZCkpDQoNCnRkZg0KYGBgDQoNCiMjIFF1ZXN0aW9uIDMNCg0KYGBge3J9DQoNCnRkZiA8LSB0ZGYgJT4lIA0KICBtdXRhdGUoc3RhcnRfbW9udGggPSBtb250aChzdGFydF9kYXRlLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSkpDQoNCnRkZiAlPiUgDQogIGdyb3VwX2J5KHN0YXJ0X21vbnRoKSAlPiUgDQogIHN1bW1hcmlzZShjb3VudCA9IG4oKSkNCg0KYGBgDQoNCkp1bHkgaXMgdGhlIG1vc3QgcG9wdWxhciBtb250aCB0byBzdGFydCB0aGUgVGRGLg0KDQojIyBRdWVzdGlvbiA0DQoNCmBgYHtyfQ0KDQp0ZGYgPC0gdGRmICU+JSANCiAgIG11dGF0ZShzdGFydF93ZGF5ID0gd2RheShzdGFydF9kYXRlLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSkpDQoNCnRkZiAlPiUgDQogIGdyb3VwX2J5KHN0YXJ0X3dkYXkpICU+JSANCiAgc3VtbWFyaXNlKGNvdW50X3dkYXkgPSBuKCkpICU+JSANCiAgc2xpY2VfbWF4KGNvdW50X3dkYXkpDQoNCmBgYA0KU2F0dXJkYXkgaXMgdGhlIG1vc3QgY29tbW9uIHdlZWsgZGF5IHRvIHN0YXJ0IHRoZSBUZEYuDQoNCiMjIFF1ZXN0aW9uIDUNCg0KYGBge3J9DQojIHRkZiBsYXN0cyAyMyBkYXlzIHNvIGV2ZW50IGVuZHMgb24gdGhlIGRhdGUgMjIgZGF5cyBhZnRlciB0aGUgc3RhcnQgZGF0ZS4NCnRkZiA8LSB0ZGYgJT4lIA0KICBtdXRhdGUoZW5kX2RhdGUgPSBzdGFydF9kYXRlICsgZGF5cygyMikpDQoNCnRkZiAlPiUgDQogIHNlbGVjdChzdGFydF9kYXRlLCBlbmRfZGF0ZSkNCmBgYA0KDQojIyBRdWVzdGlvbiA2DQoNCmBgYHtyfQ0KDQp0ZGYgPC0gdGRmICU+JSANCiAgbXV0YXRlKHJpZGVyX2FnZV9zdGFydCA9IGFzLmR1cmF0aW9uKHN0YXJ0X2RhdGUgLSBib3JuKSkNCg0KdGRmDQpgYGANCg0KIyMgUXVlc3Rpb24gNw0KDQpgYGB7cn0NCg0KZGVwYXJ0X3RpbWUgPC0geW1kX2htcygiMjAxOC0wOC0wNyAxNDoxNTowMCIsIHR6ID0gIkF1c3RyYWxpYS9TeWRuZXkiKQ0KDQphcnJpdmVfdGltZSA8LSB5bWRfaG1zKCIyMDE4LTA4LTA4IDU6NDA6MDAiLCB0eiA9ICJFdXJvcGUvTG9uZG9uIikNCg0KZGVwYXJ0X3RpbWUNCmFycml2ZV90aW1lDQoNCmBgYA0KDQojIyBRdWVzdGlvbiA4IA0KDQpgYGB7cn0NCg0KZGlmZl90aW1lIDwtIGFzLm51bWVyaWMoYXJyaXZlX3RpbWUgLSBkZXBhcnRfdGltZSwgImhvdXJzIikNCg0KZGlmZl90aW1lDQoNCmBgYA0KDQojIyBRdWVzdGlvbiA5DQoNCmBgYHtyfQ0KDQpkZXBhcnR1cmVfdGltZSA8LSB5bWRfaG0oIjIwMTgtMDgtMTAgMDY6MjAiLCB0eiA9ICJFdXJvcGUvTG9uZG9uIikNCmZsaWdodF90aW1lIDwtIGhtKCIyODo0NiIpDQoNCmFycml2YWxfdGltZSA8LSB3aXRoX3R6KGRlcGFydHVyZV90aW1lICsgZmxpZ2h0X3RpbWUsIHR6b25lID0gIkF1c3RyYWxpYS9TeWRuZXkiKQ0KDQphcnJpdmFsX3RpbWUNCmBgYA0K